home *** CD-ROM | disk | FTP | other *** search
/ Shareware Grab Bag / Shareware Grab Bag.iso / 010 / pcgames.arc / OTHELLO.BAS (.txt) < prev    next >
Encoding:
GW-BASIC  |  1982-09-14  |  8.9 KB  |  229 lines

  1. 10  CLEAR ,32000:DEF SEG=&HFA0:BLOAD"OTHELLO.EXE",0
  2. 20  FOR A=1 TO 9:ON KEY(A) GOSUB 1520:KEY(A) ON:NEXT
  3. 30  ON KEY(10) GOSUB 2240
  4. 40  GOTO 200
  5. 50  DEF SEG=&HFA0
  6. 60  ROUTINE=0
  7. 70  CALL ROUTINE (MTBL(0),VTBL(0),MV)
  8. 80  MV=MV/2:HOLD=MV
  9. 90  LIN=19-((HOLD\10)*2):CSR=(HOLD MOD 10)*6+6:CHR=SCREEN(LIN,CSR):LIN2=LIN:CSR2=CSR:COLOR 31,0:LOCATE LIN2,CSR2:PRINT CHR$(15);:COLOR 15,0
  10. 100  FOR J = 1 TO 500: NEXT
  11. 110  VALID=0:IF MTBL(MV)<>0 THEN RETURN
  12. 120  B=0
  13. 130  IF MTBL(MV+DIR(B))<>PLAYER(T) THEN 190
  14. 140  A=MV+(2*DIR(B))
  15. 150  IF MTBL(A)=T3 OR MTBL(A)=T0 THEN 190
  16. 160  IF MTBL(A)<>T THEN A=A+DIR(B):GOTO 150
  17. 170  VALID=1:C=MV
  18. 180  IF C<>A THEN MTBL(C)=T:C=C+DIR(B):GOTO 180
  19. 190  B=B+1:IF B<8 THEN 130 ELSE RETURN
  20. 200  KEY OFF:WIDTH 80:CLS:DEFINT A-Y:DEFSTR Z
  21. 210  DIM MTBL(100),VTBL(100),DIR(7),Z(2),PLAYER(2)
  22. 220  T3=3:T0=0:MV=0:GOSUB 1940
  23. 230  XLIN=1:XPOS=1:GOSUB 1410:GOSUB 1180:GOSUB 2290:GOSUB 2320
  24. 240  IF Y THEN GOSUB 950:IF LEGAL=0 THEN CT=T0 ELSE CT=CT+1:IF CT=2 THEN GOTO 1100 ELSE T=PLAYER(T):GOTO 240
  25. 250  TT=TT+1:Y=Y+1:LOCATE 22,1:PRINT SPC(75):IF TT>44 THEN POKE 163,&H7E
  26. 260  IF T=2 THEN GOSUB 2320
  27. 270  GOSUB 690:GOSUB 290:T=PLAYER(T)
  28. 280  GOSUB 1280:GOTO 240
  29. 290  ON T GOTO 300,510
  30. 300  IF MV=12 THEN VTBL(22)=2:VTBL(13)=2
  31. 310  IF MV=19 THEN VTBL(29)=2:VTBL(18)=2
  32. 320  IF MV=82 THEN VTBL(83)=2:VTBL(72)=2
  33. 330  IF MV=89 THEN VTBL(88)=2:VTBL(79)=2
  34. 340  IF MV<13 OR MV>18 THEN 370
  35. 350  VTBL(MV+1)=VTBL(MV+1)+1:VTBL(MV+2)=VTBL(MV+2)+100:VTBL(MV-2)=VTBL(MV-2)+100
  36. 360  VTBL(MV-1)=VTBL(MV-1)+1:GOTO 670
  37. 370  IF MV=22 THEN VTBL(32)=VTBL(32)+1:VTBL(42)=VTBL(42)+100:GOTO 670
  38. 380  IF MV=32 THEN VTBL(52)=VTBL(52)+100:VTBL(42)=VTBL(42)+1:VTBL(22)=VTBL(22)+1:GOTO 670
  39. 390  IF MV=42 THEN VTBL(62)=VTBL(62)+100:VTBL(22)=VTBL(22)+100:VTBL(52)=VTBL(52)+1:VTBL(32)=VTBL(32)+1:GOTO 670
  40. 400  IF MV=52 THEN VTBL(72)=VTBL(72)+100:VTBL(32)=VTBL(32)+100:VTBL(62)=VTBL(62)+1:VTBL(42)=VTBL(42)+1:GOTO 670
  41. 410  IF MV=62 THEN VTBL(42)=VTBL(42)+100:VTBL(72)=VTBL(72)+1:VTBL(52)=VTBL(52)+1:GOTO 670
  42. 420  IF MV=72 THEN VTBL(62)=VTBL(62)+1:VTBL(52)=VTBL(52)+100:GOTO 670
  43. 430  IF MV=29 THEN VTBL(39)=VTBL(39)+1:VTBL(49)=VTBL(49)+100:GOTO 670
  44. 440  IF MV=39 THEN VTBL(59)=VTBL(59)+100:VTBL(29)=VTBL(29)+1:VTBL(49)=VTBL(49)+1:GOTO 670
  45. 450  IF MV=49 THEN VTBL(29)=VTBL(29)+100:VTBL(69)=VTBL(69)+100:VTBL(39)=VTBL(39)+1:VTBL(59)=VTBL(59)+1:GOTO 670
  46. 460  IF MV=59 THEN VTBL(39)=VTBL(39)+100:VTBL(79)=VTBL(79)+100:VTBL(49)=VTBL(49)+1:VTBL(69)=VTBL(69)+1:GOTO 670
  47. 470  IF MV=69 THEN VTBL(49)=VTBL(49)+100:VTBL(59)=VTBL(59)+1:VTBL(79)=VTBL(79)+1:GOTO 670
  48. 480  IF MV=79 THEN VTBL(69)=VTBL(69)+1:VTBL(49)=VTBL(49)+100:GOTO 670
  49. 490  IF MV<83 OR MV>88 THEN 670
  50. 500  VTBL(MV+1)=VTBL(MV+1)+1:VTBL(MV+2)=VTBL(MV+2)+100:VTBL(MV-2)=VTBL(MV-2)+100:VTBL(MV-1)=VTBL(MV-1)+1:GOTO 670
  51. 510  IF MV<13 OR MV>18 THEN 530
  52. 520  VTBL(MV+1)=VTBL(MV+1)+100:VTBL(MV-1)=VTBL(MV-1)+100:GOTO 670
  53. 530  IF MV=22 THEN VTBL(32)=VTBL(32)+100:GOTO 670
  54. 540  IF MV=32 THEN VTBL(42)=VTBL(42)+100:VTBL(22)=VTBL(22)+100:GOTO 670
  55. 550  IF MV=42 THEN VTBL(52)=VTBL(52)+100:VTBL(32)=VTBL(32)+100:GOTO 670
  56. 560  IF MV=52 THEN VTBL(62)=VTBL(62)+100:VTBL(42)=VTBL(42)+100:GOTO 670
  57. 570  IF MV=62 THEN VTBL(72)=VTBL(72)+100:VTBL(52)=VTBL(52)+100:GOTO 670
  58. 580  IF MV=72 THEN VTBL(62)=VTBL(62)+100:GOTO 670
  59. 590  IF MV=29 THEN VTBL(39)=VTBL(39)+100:GOTO 670
  60. 600  IF MV=39 THEN VTBL(29)=VTBL(29)+100:VTBL(49)=VTBL(49)+100:GOTO 670
  61. 610  IF MV=49 THEN VTBL(39)=VTBL(39)+100:VTBL(59)=VTBL(59)+100:GOTO 670
  62. 620  IF MV=59 THEN VTBL(49)=VTBL(49)+100:VTBL(69)=VTBL(69)+100:GOTO 670
  63. 630  IF MV=69 THEN VTBL(59)=VTBL(59)+100:VTBL(79)=VTBL(79)+100:GOTO 670
  64. 640  IF MV=79 THEN VTBL(69)=VTBL(69)+100:GOTO 670
  65. 650  IF MV<83 OR MV>88 THEN 670
  66. 660  VTBL(MV+1)=VTBL(MV+1)+100:VTBL(MV-1)=VTBL(MV-1)+100:GOTO 670
  67. 670  IF T=2 THEN GOSUB 1620
  68. 680  VTBL(12)=1:VTBL(19)=1:VTBL(82)=1:VTBL(89)=1:RETURN
  69. 690  IF T=1 THEN 50
  70. 700  IF Y>1 THEN LIN=19-((HOLD\10)*2):CSR=(HOLD MOD 10)*6+6:CHR=SCREEN(LIN,CSR):LIN2=LIN:CSR2=CSR:GOTO 720
  71. 710  CHR=SCREEN(12,36):LIN=13:CSR=36:LIN2=13:CSR2=36:CHR=SCREEN (LIN2,CSR2)
  72. 720  COLOR 31,0:LOCATE LIN2,CSR2:PRINT CHR$(15);:COLOR 15,0
  73. 730  GOSUB 930
  74. 740  IF RIGHT$(Z,1)=CHR$(72) OR Z="8" THEN LIN=LIN-2:GOTO 800
  75. 750  IF RIGHT$(Z,1)=CHR$(80) OR Z="2" THEN LIN=LIN+2:GOTO 800
  76. 760  IF RIGHT$(Z,1)=CHR$(75) OR Z="4" THEN CSR=CSR-6:GOTO 800
  77. 770  IF RIGHT$(Z,1)=CHR$(77) OR Z="6" THEN CSR=CSR+6:GOTO 800
  78. 780  IF Z=CHR$(13) THEN 870
  79. 790  GOTO 730
  80. 800  COLOR 15,0:LOCATE LIN2,CSR2:PRINT CHR$(CHR);
  81. 810  IF CSR<18 THEN CSR=18
  82. 820  IF CSR>60 THEN CSR=60
  83. 830  IF LIN<3 THEN LIN=3
  84. 840  IF LIN>17 THEN LIN=17
  85. 850  CHR=SCREEN(LIN,CSR):LOCATE LIN,CSR,0:COLOR 31,0:PRINT CHR$(15);
  86. 860  LIN2=LIN:CSR2=CSR:COLOR 15,0:GOTO 730
  87. 870  B=(19-LIN)\2:A=CSR\6-2
  88. 880  MV=A+1+B*10:GOSUB 110
  89. 890  IF VALID THEN RETURN
  90. 900  LOCATE 21,1:PRINT SPC(79):LOCATE 21,20
  91. 910  PRINT"  Invalid Reply.    Please Try Again.";
  92. 920  FOR A=1 TO 3500:NEXT:LOCATE 21,1:PRINT SPC(79):GOTO 730
  93. 930  DEF SEG:POKE 106,0:IF INKEY$<>"" THEN 930
  94. 940  Z=INKEY$:IF Z="" THEN 940 ELSE RETURN
  95. 950  LEGAL=0:LOCATE 23,1:PRINT SPC(79)
  96. 960  LOCATE 24,1:PRINT SPC(79);:LOCATE 21,30
  97. 970  A=12
  98. 980  IF MTBL(A)<>0 THEN 1060
  99. 990  B=0
  100. 1000  IF MTBL(A+DIR(B))<>PLAYER(T) THEN 1050
  101. 1010  C=A+(2*DIR(B))
  102. 1020  IF MTBL(C)=T3 OR MTBL(C)=T0 THEN 1050
  103. 1030  IF MTBL(C)=T THEN RETURN
  104. 1040  C=C+DIR(B):GOTO 1020
  105. 1050  B=B+1:IF B<8 THEN 1000
  106. 1060  A=A+1:IF A<90 THEN 980
  107. 1070  LOCATE 21,30
  108. 1080  LEGAL=1:PRINT T$(T)" Have No Legal Play."
  109. 1090  FOR AA=1 TO 3000:NEXT:LOCATE 21,1:PRINT SPC(79):RETURN
  110. 1100  C(1)=0:C(2)=0:FOR A=12 TO 89:C(MTBL(A))=C(MTBL(A))+1:NEXT
  111. 1110  LOCATE 21,33:COLOR 15,0
  112. 1120  IF C(1)=C(2) THEN PRINT"The Game Is A TIE.":GOTO 1140
  113. 1130  LOCATE 21,35:IF C(2)>C(1) THEN PRINT"You Win." ELSE PRINT"I Win.
  114. 1140  LOCATE 22,23:PRINT"Would You Like To Play Again? <Y/N>";:COLOR 3,0
  115. 1150  GOSUB 930:IF Z="Y" OR Z="y" THEN RUN ELSE IF Z<>"N" AND Z<>"n" THEN 1150
  116. 1160  LOCATE 22,20:PRINT"
  117. 1170  RUN"MENU
  118. 1180  CLS:COLOR 3,0
  119. 1190  PRINT TAB(15)"     F R I E N D L Y W A R E   O T H E L L O     "
  120. 1200  COLOR 4,0
  121. 1210  PRINT TAB(15)"KEYTHENTHENTHENTHENTHEN<0xCB!>THENTHENTHENTHENTHEN<0xCB!>THENTHENTHENTHENTHEN<0xCB!>THENTHENTHENTHENTHEN<0xCB!>THENTHENTHENTHENTHEN<0xCB!>THENTHENTHENTHENTHEN<0xCB!>THENTHENTHENTHENTHEN<0xCB!>THENTHENTHENTHENTHENCLOSE"
  122. 1220  PRINT TAB(15)"OPEN     OPEN     OPEN     OPEN     OPEN     OPEN     OPEN     OPEN     OPEN"
  123. 1230  FOR A=7 TO 1 STEP -1
  124. 1240  PRINT TAB(15)"TOTHENTHENTHENTHENTHENTAB(THENTHENTHENTHENTHENTAB(THENTHENTHENTHENTHENTAB(THENTHENTHENTHENTHENTAB(THENTHENTHENTHENTHENTAB(THENTHENTHENTHENTHENTAB(THENTHENTHENTHENTHENTAB(THENTHENTHENTHENTHENRANDOMIZE"
  125. 1250  PRINT TAB(15)"OPEN     OPEN     OPEN     OPEN     OPEN     OPEN     OPEN     OPEN     OPEN"
  126. 1260  NEXT A
  127. 1270  PRINT TAB(15)"SCREENTHENTHENTHENTHENTHENLOCATETHENTHENTHENTHENTHENLOCATETHENTHENTHENTHENTHENLOCATETHENTHENTHENTHENTHENLOCATETHENTHENTHENTHENTHENLOCATETHENTHENTHENTHENTHENLOCATETHENTHENTHENTHENTHENLOCATETHENTHENTHENTHENTHENLOAD"
  128. 1280  LOCATE 1,15:COLOR 15,0
  129. 1290  FOR A=8 TO 1 STEP -1
  130. 1300     LOCATE CSRLIN+2,15
  131. 1310     FOR B=1 TO 8
  132. 1320        D=A*10+B+1
  133. 1330     LOCATE ,POS(0)+1:PRINT Z(MTBL(D));
  134. 1340     NEXT B
  135. 1350  NEXT A
  136. 1360  C(1)=0:C(2)=0:FOR A=12 TO 89:C(MTBL(A))=C(MTBL(A))+1:NEXT
  137. 1370  LOCATE 2,2:PRINT"I Am BLACK":LOCATE 2,67:PRINT"You Are WHITE"
  138. 1380  LOCATE 3,2:PRINT" And Have":LOCATE 3,70:PRINT" And Have"
  139. 1390  LOCATE 4,1:PRINT C(1)"Squares ":LOCATE 4,69:PRINT C(2)"Squares "
  140. 1400  COLOR 3,0:RETURN
  141. 1410  FOR A=12 TO 89:READ VTBL(A):NEXT
  142. 1420  Z(0)="     "
  143. 1430  Z(2)=" CSRLINCSRLINCSRLIN "
  144. 1440  Z(1)=" LINELINELINE "
  145. 1450  FOR A=0 TO 100:MTBL(A)=0:NEXT
  146. 1460  FOR A=1 TO 10
  147. 1470     MTBL(A)=3:MTBL(A*10)=3:MTBL(A*10-9)=3:MTBL(A+90)=3
  148. 1480  NEXT
  149. 1490  MTBL(45)=1:MTBL(46)=2:MTBL(55)=2:MTBL(56)=1:PLAYER(1)=2:PLAYER(2)=1:T=2
  150. 1500  FOR A=0 TO 7:READ DIR(A):NEXT
  151. 1510  T$(1)="I":T$(2)="You"
  152. 1520  RETURN
  153. 1530  DATA 1,49,5,17,18,6,50,2,0
  154. 1540  DATA 0,51,257,41,33,34,42,258,52,0
  155. 1550  DATA 0,7,43,13,25,26,14,44,8,0
  156. 1560  DATA 0,19,35,27,99,99,28,36,20,0
  157. 1570  DATA 0,21,37,29,99,99,30,38,22,0
  158. 1580  DATA 0,9,45,15,31,32,16,46,10,0
  159. 1590  DATA 0,53,259,47,39,40,48,260,54,0
  160. 1600  DATA 0,3,55,11,23,20,12,56,4
  161. 1610  DATA 1,11,10,9,-1,-11,-10,-9
  162. 1620  IF MTBL(13)=2 AND MTBL(15)=2 THEN VTBL(14)=1
  163. 1630  IF MTBL(16)=2 AND MTBL(18)=2 THEN VTBL(17)=1
  164. 1640  IF MTBL(22)=2 AND MTBL(42)=2 THEN VTBL(32)=1
  165. 1650  IF MTBL(52)=2 AND MTBL(72)=2 THEN VTBL(62)=1
  166. 1660  IF MTBL(29)=2 AND MTBL(49)=2 THEN VTBL(39)=1
  167. 1670  IF MTBL(59)=2 AND MTBL(79)=2 THEN VTBL(69)=1
  168. 1680  IF MTBL(83)=2 AND MTBL(85)=2 THEN VTBL(84)=1
  169. 1690  IF MTBL(86)=2 AND MTBL(88)=2 THEN VTBL(87)=1
  170. 1700  IF MV=13 THEN VTBL(15)=2:VTBL(16)=2:VTBL(17)=2:GOTO 1780
  171. 1710  IF MV=18 THEN VTBL(14)=2:VTBL(15)=2:VTBL(16)=2:GOTO 1780
  172. 1720  IF MV=83 THEN VTBL(85)=2:VTBL(86)=2:VTBL(87)=2:GOTO 1780
  173. 1730  IF MV=88 THEN VTBL(84)=2:VTBL(85)=2:VTBL(86)=2:GOTO 1780
  174. 1740  IF MV=22 THEN VTBL(42)=2:VTBL(52)=2:VTBL(62)=2:GOTO 1780
  175. 1750  IF MV=72 THEN VTBL(32)=2:VTBL(42)=2:VTBL(52)=2:GOTO 1780
  176. 1760  IF MV=29 THEN VTBL(49)=2:VTBL(59)=2:VTBL(69)=2:GOTO 1780
  177. 1770  IF MV=79 THEN VTBL(39)=2:VTBL(49)=2:VTBL(59)=2:GOTO 1780
  178. 1780  IF MTBL(13)=2 AND MTBL(17)=1 THEN VTBL(15)=2
  179. 1790  IF MTBL(14)=1 AND MTBL(18)=2 THEN VTBL(16)=2
  180. 1800  IF MTBL(22)=2 AND MTBL(62)=1 THEN VTBL(42)=2
  181. 1810  IF MTBL(32)=1 AND MTBL(72)=2 THEN VTBL(52)=2
  182. 1820  IF MTBL(29)=2 AND MTBL(69)=1 THEN VTBL(49)=2
  183. 1830  IF MTBL(39)=1 AND MTBL(79)=2 THEN VTBL(59)=2
  184. 1840  IF MTBL(83)=2 AND MTBL(87)=1 THEN VTBL(85)=2
  185. 1850  IF MTBL(86)=1 AND MTBL(88)=2 THEN VTBL(84)=2
  186. 1860  IF MTBL(13)=2 AND MTBL(15)=1 THEN VTBL(17)=2
  187. 1870  IF MTBL(16)=1 AND MTBL(18)=2 THEN VTBL(14)=2
  188. 1880  IF MTBL(22)=2 AND MTBL(42)=1 THEN VTBL(62)=2
  189. 1890  IF MTBL(52)=1 AND MTBL(72)=2 THEN VTBL(32)=2
  190. 1900  IF MTBL(29)=2 AND MTBL(49)=1 THEN VTBL(69)=2
  191. 1910  IF MTBL(59)=1 AND MTBL(79)=2 THEN VTBL(39)=2
  192. 1920  IF MTBL(83)=2 AND MTBL(85)=1 THEN VTBL(87)=2
  193. 1930  RETURN
  194. 1940  CLS:COLOR 6,0
  195. 1950  LOCATE 1,1:PRINT STRING$(80,219)
  196. 1960  FOR A=2 TO 22:LOCATE A,1:PRINT"CSRLIN":LOCATE A,80:PRINT"CSRLIN":NEXT
  197. 1970  LOCATE 23,1:PRINT STRING$(80,219);
  198. 1980  LOCATE 3,20:COLOR 11,0:PRINT"F R I E N D L Y W A R E   O T H E L L O
  199. 1990  COLOR 15,0:LOCATE 8,23:PRINT"Would You Like Instructions? <Y/N>"
  200. 2000  Z=INKEY$:IF Z="" THEN 2000
  201. 2010  IF Z="N" OR Z="n" THEN CLS:RETURN
  202. 2020  IF Z<>"Y" AND Z<>"y" THEN 2000
  203. 2030  COLOR 7,0:LOCATE 5,20:PRINT  "Computer Othello is a game played on an
  204. 2040  LOCATE 6,20:PRINT  "8  by  8  game board. The object of the
  205. 2050  LOCATE 7,20:PRINT  "game is to `capture' more  squares than
  206. 2060  LOCATE 8,20:PRINT  "the computer by outflanking his squares
  207. 2070  LOCATE 9,20:PRINT  "with your squares.
  208. 2090  LOCATE 11,20:PRINT"The squares along the wall are valuable
  209. 2100  LOCATE 12,20:PRINT"because  they  can only be  `outflanked'
  210. 2110  LOCATE 13,20:PRINT"in one direction. The corner can not be
  211. 2120  LOCATE 14,20:PRINT"recaptured after it has been taken.  It
  212. 2130  LOCATE 15,20:PRINT"is the most important square to capture.
  213. 2150  LOCATE 17,20:PRINT"Some stratagy to use would be to  avoid
  214. 2160  LOCATE 18,20:PRINT"any square adjacent to the wall,  while
  215. 2170  LOCATE 19,20:PRINT"you try to capture wall squares.
  216. 2220  LOCATE 25,27:COLOR 15,0:PRINT"Strike Any Key To Continue";
  217. 2230  Z=INKEY$:IF Z="" THEN 2230 ELSE CLS:RETURN
  218. 2240  KEY(10) OFF:XLIN=CSRLIN:XPOS=POS(0):LOCATE 25,1:PRINT SPC(79);
  219. 2250  LOCATE 25,21:PRINT"Do You Wish To Leave This Game? <Y/N>";
  220. 2260  Z=INKEY$:IF Z="" THEN 2260
  221. 2270  IF Z="y" OR Z="Y" THEN RUN"menu
  222. 2280  IF Z<>"n" AND Z<>"N" THEN 2260
  223. 2290  LOCATE 25,1:PRINT SPC(79);:LOCATE 25,23:COLOR 0,7
  224. 2300  PRINT" Strike <F10> To Leave This Game ";:COLOR 7,0:LOCATE XLIN,XPOS,0
  225. 2310  KEY(10) ON:RETURN
  226. 2320  COLOR 6,0:LOCATE 23,22:PRINT"Use Cursor Arrows To Pick Your Move
  227. 2330  LOCATE 24,22:PRINT"Strike ENTER  Key To Make Your Play";
  228. 2340  COLOR 15,0:RETURN
  229.